<?php
if (!defined('APP') or !constant('APP')) die('Direct access not allowed!');
ini_set('display_errors', 1); 
ini_set('log_errors', 1); 

class DemotController extends Controller {
           
        
    public static function demot_sort()
    {
               
        $op = isset($_GET['sort']) ? $_GET['sort'] : '';
        
        switch ($op):
            case DemotModel::$sort['SORT_STATUS_ASC']: 
                if (isset($_SESSION['sort'])&&$_SESSION['sort'] == DemotModel::$sort['SORT_STATUS_ASC'])
                    $_SESSION['sort'] = DemotModel::$sort['SORT_STATUS_DESC']; 
                else
                    $_SESSION['sort'] = DemotModel::$sort['SORT_STATUS_ASC']; 
                break;
            case DemotModel::$sort['SORT_STATUS_DESC']:
                if (isset($_SESSION['sort'])&&$_SESSION['sort'] == DemotModel::$sort['SORT_STATUS_ASC'])
                    $_SESSION['sort'] = DemotModel::$sort['SORT_STATUS_DESC']; 
                else
                    $_SESSION['sort'] = DemotModel::$sort['SORT_STATUS_ASC']; 
                break;
            default: 
                if (isset($_SESSION['sort'])&&$_SESSION['sort'] == DemotModel::$sort['SORT_DATE_DESC'])
                {
                   $_SESSION['sort'] = DemotModel::$sort['SORT_DATE_ASC']; 
                }
                else
                {
                    $_SESSION['sort'] = DemotModel::$sort['SORT_DATE_DESC'];
                }
        endswitch;
          
        System::redirect(View::getRoot()."/index.php?controller=demot&action=show");  
        die('Odświerz strone.');
        
    }
    
    public static function change()
    {
        
        if(!UserModel::isLoggedIn()||!UserModel::checkPrivileges(Privileges::ADMIN)) 
        { 
            flash_message::setMessage("Dostęp wyłącznie dla administratorów");
            System::redirect(View::getRoot()."/index.php?controller=index");  
            die('Odświerz strone.'); 
        }
        
        $post = $_POST;
        
        $idx = isset($post['idx']) ? $post['idx'] : array();
        $status = $post['status'];
        $page = isset($post['page']) ? $post['page'] : 1;
        
        foreach ($idx as $id) {
            echo "Zmieniam ".$id;
            DemotModel::changeStatus($id, $status);
        }
      //  die();
        System::redirect(View::getRoot()."/index.php?controller=demot&action=show&page=".$page); 
    }
    
    public function add_demot()
    {
         if(!UserModel::isLoggedIn()) 
         { 
            flash_message::setMessage("Dostęp wyłącznie dla zalogowanych użytkowników");
            System::redirect(View::getRoot()."/index/login");  
            die('Odświerz strone.');            
         }
         require_once "model/DemotModel.php";   
         require_once "model/DemotCategoryModel.php";   
         
         $inserted_id = intval(DemotModel::save(null, DStatus::TEMP));
        
         if (!$inserted_id)
         {
                flash_message::setMessage("Błąd podczas wyświetlania formularza.");
                System::redirect(View::getRoot()."/index/strona-glowna");  
                die('Odświerz strone.');
         }
         
         View::assign('d_categories', DemotCategoryModel::fetchAll());
         View::assign('inserted_id', $inserted_id);
         
         $token = md5(uniqid(rand(), TRUE));
         View::assign('token', $token);
         $_SESSION['token'] = $token;
         
         self::setTemplate('laywer');  
         self::setLayout('page');
         self::setContentFile('parts/demot/addDemot');         
         
    }
    
    public function rank()
    {
        if(!UserModel::isLoggedIn()) 
        { 
            flash_message::setMessage("Dostęp wyłącznie dla zalogowanych użytkowników");
            System::redirect(View::getRoot()."/index/brak-dostepu");   
            die('Odświerz strone.');            
        }
                    
        require_once "model/DemotModel.php";     
        require_once "model/UserRankModel.php";         
         
        $mode = isset($_REQUEST['mode']) ? $_REQUEST['mode'] : '';        
        $id = isset($_REQUEST['id']) ? intval($_REQUEST['id']) : 0;
        $page = isset($_REQUEST['page']) ? intval($_REQUEST['page']) : 1;
        
        /*
         * rt = 1 ; refresh page
         * rt = other ; redirect to page
         */
        $rt = isset($_REQUEST['rt']) ? intval($_REQUEST['rt']) : 0;
        
        
        if (UserRankModel::exist($id))
        {
            flash_message::setMessage("Już oddałeś głos na ten demot"); 
            if ($rt == 1) 
            {
                System::redirect(View::getRoot()."/demot/pokaz/".$id); 
            }
            else
            {
                System::redirect(View::getRoot()."/index/index/".$page);    
            }
            die('Odśwież stronę.');
        }
       
        switch($mode)
        {
            case 'minus': 
                DemotModel::rank($id, "minus"); 
                flash_message::setMessage("Został dodany rank -1 ");       
                UserRankModel::save($id);         
            break;
            default: 
                DemotModel::rank($id, "plus");
                UserRankModel::save($id);
                flash_message::setMessage("Został dodany rank +1 ");       
                
        }
        if ($rt == 1) 
        {
            System::redirect(View::getRoot()."/demot/pokaz/".$id);
            die();
        }
        else {
            System::redirect(View::getRoot()."/index/index/".$page); 
        }
        
        die('Odśwież stronę.');        
    }
    
    public function showDemot()
    {
        require_once "model/DemotModel.php";
        require_once "model/DemotCommentModel.php";
        
        $id = intval($_REQUEST['id']);
        
        $demotComments = DemotCommentModel::fetchAllByDemotId($id);
                
        $demot = DemotModel::fetch($id);
        $birth_date = isset($_SESSION['birth_date']) ? $_SESSION['birth_date'] : date('Y-m-d');
        
        $age = @intval(date('Y-m-d')-(date($birth_date)));
      
        if(intval($demot['for_adults'])==1 && !UserModel::isLoggedIn()) 
        { 
            self::setTemplate('laywer');  
            self::setLayout('page');
            self::setContentFile('parts/demot/for_adult');
        }
        elseif (UserModel::isLoggedIn() && $age < 18 && intval($demot['for_adults'])==1)
        {
            self::setTemplate('laywer');  
            self::setLayout('page');
            self::setContentFile('parts/demot/is_kinder'); 
        }
        
        else
        {

            View::assign('demot', $demot);       
            View::assign('demotComments', $demotComments); 
            $token = md5(uniqid(rand(), TRUE));
            View::assign('comment_form_token', $token);
            $_SESSION['comment_form_token'] = $token;

            if ($demot['id_type'] == DStatus::TYPE_IMAGE) {
                if (file_exists("./bank/demot/normal/".$demot['id'].".jpg")) 
                    $fb_img = View::getRoot().'/bank/demot/normal/'.$demot['id'].".jpg";
                else
                    $fb_img = View::getRoot().'/bank/demot/def.jpg';
            }
            elseif ($demot['id_type'] == DStatus::TYPE_MOVIE)
            {
                    $fb_img = View::getRoot().'/bank/video-img.jpg';
            }      
            else 
                  $fb_img = View::getRoot().'/bank/demot/def.jpg';

            //View::setFbTags($fb_title, $fb_type, $fb_url, $fb_img, $fb_site_name, $fb_desc);
            View::setFbTags($demot['title'], 
                    "", //type
                    View::getRoot().'/demot/pokaz/'.$demot['id'], 
                    $fb_img, 
                    "Zabij.pl - ".$demot['title'], 
                    "desc"
            );

            self::setTemplate('laywer');  
            self::setLayout('page');
            self::setContentFile('parts/demot/show');
        }
    }
    
    public function show()
    {
        if(!UserModel::isLoggedIn()||!UserModel::checkPrivileges(Privileges::ADMIN)) 
        { 
            flash_message::setMessage("Dostęp wyłącznie dla administratorów");
            System::redirect(View::getRoot()."/index.php?controller=index");  
            die('Odświerz strone.'); 
        }
        require_once "model/DemotModel.php";
        require_once "model/DemotCategoryModel.php";
        require_once 'library/external/pager.php';
        
        $oPager = new Vframe_Pagination();
        $oPager->limit(50);
        $oPager->items(DemotModel::countAdminAll());
        
        $page = isset($_GET['page']) ? intval($_GET['page']) : 1;
        $oPager->page($page);     
        
        $oPager->PatternPage('<a href="index.php?controller=demot&action=show&page=[$]">[$]</a>');
        $oPager->PatternPageCurrent('<a class="active">[$]</a>');
        $oPager->PatternPageNavigation('<a href="index.php?controller=demot&action=show&page=[$]" rel="nofollow">[$$]</a>', array('&laquo; poprzednia', 'następna &raquo;'));
        $oPager->PatternSeparator('<span>...</span>');
        
        View::assign('pager', $oPager);
        
        View::assign('demots', DemotModel::fetchAllAdmin($oPager->start(), $oPager->limit()));        
        self::setTemplate('admin');  
        self::setLayout('page');
        self::setContentFile('parts/demot/list');
        
    }
    
    public function edit()
    {
        if(!UserModel::isLoggedIn()||!UserModel::checkPrivileges(Privileges::ADMIN)) 
        { 
            flash_message::setMessage("Dostęp wyłącznie dla administratorów");
            System::redirect(View::getRoot()."/index.php?controller=index");  
            die('Odświerz strone.');            
        }
        
        require_once "model/DemotModel.php";
        require_once "model/DemotCategoryModel.php";   
        
        $id = isset($_GET['id']) ? intval($_GET['id']) : 0;
                
        if ($id > 0) {
            View::assign('demots_categories', DemotCategoryModel::fetchAll());
            View::assign('demot', DemotModel::fetch($id));

            self::setTemplate('admin');  
            self::setLayout('page');
            self::setContentFile('parts/demot/editDemot');
        }        
    }
    
    public function update()
    {
        if(!UserModel::isLoggedIn()||!UserModel::checkPrivileges(Privileges::ADMIN)) 
        { 
            flash_message::setMessage("Dostęp wyłącznie dla administratorów");
            System::redirect(View::getRoot()."/index.php?controller=index");  
            die('Odświerz strone.');            
        }
        
        require_once "model/DemotModel.php";
              
        $data = isset($_POST['data']) ? $_POST['data'] : false;   
        
        if ($data)
        {        
            DemotModel::update($data);
            flash_message::setMessage("Zaktualizowano pomyślnie rekord.");
        }
        System::redirect("index.php?controller=demot&action=show");
    }
    
    public function save_admin()
    {
        self::save();
        System::redirect(View::getRoot()."/index.php?controller=demot&action=show");
    }
    
    public function update_by_user_movie()
    {
        require_once "model/DemotModel.php";
        $data = isset($_POST['data']) ? $_POST['data'] : false;
        
        if ($data['token'] != $_SESSION['token']) { 
            flash_message::setMessage("Błedy token!");
            System::redirect(View::getRoot()."/demot/dodaj");
            return false; 
        }
        
        if (!System::valid_youtube_url($data['movie']))
        {
            flash_message::setMessage("Nie prawidłowy format adresu URL YouTube.");
            System::redirect(View::getRoot()."/demot/dodaj");
            return false;
        }
        
        if ($data&&DemotModel::updateByUser($data, DStatus::TYPE_MOVIE))
        {  
            flash_message::setMessage("Demot został dodany do kolejki oczekujących. Po zaakceptowaniu przez moderatora trawi do POCZEKALNI."); 
        }
        else
        {
            flash_message::setMessage("Nie mozna zaktualizowac rekodu.");
        }
        System::redirect(View::getRoot()."/index/index");
    }
    
    public function update_by_user()
    {
        require_once "model/DemotModel.php";
        $data = isset($_POST['data']) ? $_POST['data'] : false;
        
        if ($data['token'] != $_SESSION['token']) { 
            flash_message::setMessage("Błedy token!");
            System::redirect(View::getRoot()."/demot/dodaj");
            return false; 
        }
        
        if ($data&&DemotModel::updateByUser($data))
        {  
            flash_message::setMessage("Demot został dodany do kolejki oczekujących. Po zaakceptowaniu przez moderatora trawi do POCZEKALNI."); 
        }
        else
        {
            flash_message::setMessage("Nie mozna zaktualizowac rekodu.");
        }
        System::redirect(View::getRoot()."/index/index");
    }
    
    public function save_user()
    {
        $last_id = intval(self::save());
        
        echo json_encode(array('success' => true, 'id' => $last_id) );
        
        exit();
    }
    
    private function save()
    {
        if(!UserModel::isLoggedIn()) 
        { 
            flash_message::setMessage("Dostęp wyłącznie dla zalogowanych użytkowników");
            System::redirect(View::getRoot()."/index/strona-glowna");  
            die('Odświerz strone.');            
        }
        
        require_once "model/DemotModel.php";
        
        $data = isset($_POST['data']) ? $_POST['data'] : false;
        
        $id = 0;
        if ($data)
        {       
            $id = DemotModel::save($data);
            if ($id)
                flash_message::setMessage("Zaktualizowano pomyślnie rekord.");
            else
                flash_message::setMessage("Wystąpiły problemy podczas zapisu rekordu.");
        }        
        
        return $id;
    }
    
    public function delete()
    {
        if(!UserModel::isLoggedIn()||!UserModel::checkPrivileges(Privileges::ADMIN)) 
        { 
            flash_message::setMessage("Dostęp wyłącznie dla administratorów");
            System::redirect(View::getRoot()."/index/strona-glowna");  
            die('Odświerz strone.');            
        }
        
        require_once "model/DemotModel.php";
        $id = intval($_GET['id']);
        
        if ($id > 0)
        {
           DemotModel::delete($id);
           flash_message::setMessage("Usunieto pomyślnie rekord."); 
        }
        else
        {
           flash_message::setMessage("Blad podczas usuwania rekordu.");   
        }
        System::redirect("index.php?controller=demot&action=show");
    }
    
    public function show_categories()
    {
      //  die(UserModel::checkPrivileges(Privileges::ADMIN)." ");
        
        if(!UserModel::isLoggedIn()||!UserModel::checkPrivileges(Privileges::ADMIN)) 
        { 
            flash_message::setMessage("Dostęp wyłącznie dla administratorów");
            System::redirect(View::getRoot()."/index/strona-glowna");  
            die('Odświerz strone.');            
        }
       
        
        require_once "model/DemotCategoryModel.php";
        
        View::assign('demots_categories', DemotCategoryModel::fetchAll());
        View::assign('demot_action', 'index.php?controller=demot&action=save_category');
        
        self::setTemplate('admin');  
        self::setLayout('page');
        self::setContentFile('parts/demot/categories');
    }
    
    public function save_category()
    {
        if(!UserModel::isLoggedIn()||!UserModel::checkPrivileges(Privileges::ADMIN)) 
        { 
            flash_message::setMessage("Dostęp wyłącznie dla administratorów");
            System::redirect(View::getRoot()."/index/strona-glowna"); 
            die('Odświerz strone.');            
        }
        
        require_once "model/DemotCategoryModel.php";
        
        $data = isset($_POST['data']) ? $_POST['data'] : false;
        
        if ($data)
        {        
            DemotCategoryModel::save($data);
            flash_message::setMessage("Zaktualizowano pomyślnie rekord.");
        }
        System::redirect("index.php?controller=demot&action=show_categories");        
    }
    
    public function delete_category()
    {
        if(!UserModel::isLoggedIn()||!UserModel::checkPrivileges(Privileges::ADMIN)) 
        { 
            flash_message::setMessage("Dostęp wyłącznie dla administratorów");
            System::redirect(View::getRoot()."/index/strona-glowna");  
            die('Odświerz strone.');            
        }
        
        require_once "model/DemotCategoryModel.php";
        $id = intval($_GET['id']);
        
        if ($id > 0)
        {
           if (DemotCategoryModel::delete($id))
           {
                flash_message::setMessage("Usunieto pomyślnie rekord."); 
           }
           else
           {
                flash_message::setMessage("Rekord nie moze zostac usuniety. Prawdopodobnie kategoria jest w użyciu w demotywatorach.."); 
           }
        }
        else
        {
           flash_message::setMessage("Blad podczas usuwania rekordu.");   
        }
        System::redirect("index.php?controller=demot&action=show_categories");
    }
    
    public function update_category()
    {
        if(!UserModel::isLoggedIn()||!UserModel::checkPrivileges(Privileges::ADMIN)) 
        { 
            flash_message::setMessage("Dostęp wyłącznie dla administratorów");
            System::redirect(View::getRoot()."/index/strona-glowna");  
            die('Odświerz strone.');            
        }
        
        require_once "model/DemotCategoryModel.php";
              
        $data = isset($_POST['data']) ? $_POST['data'] : false;
        
        if ($data)
        {        
            DemotCategoryModel::update($data);
            flash_message::setMessage("Zaktualizowano pomyślnie rekord.");
        }
        System::redirect("index.php?controller=demot&action=show_categories");
    }
    
    public function edit_category()
    {
        if(!UserModel::isLoggedIn()||!UserModel::checkPrivileges(Privileges::ADMIN)) 
        { 
            flash_message::setMessage("Dostęp wyłącznie dla administratorów");
            System::redirect(View::getRoot()."/index/strona-glowna");  
            die('Odświerz strone.');            
        }
        
        require_once "model/DemotCategoryModel.php";
        
        $id = isset($_GET['id']) ? intval($_GET['id']) : 0;
        
        if ($id > 0) {
            View::assign('demot_category', DemotCategoryModel::fetch($id));
            View::assign('demot_action', 'index.php?controller=demot&action=update_category');
        
            View::assign('demots_categories', DemotCategoryModel::fetchAll());

            self::setTemplate('admin');  
            self::setLayout('page');
            self::setContentFile('parts/demot/categories');
        }        
    }
    
    public function save_comment()
    {
      
        if(!UserModel::isLoggedIn())  
        { 
            flash_message::setMessage("Dostęp wyłącznie dla zarejestrowanych użytkowników");
            System::redirect(View::getRoot()."/index/strona-glowna");  
            die('Odświerz strone.');            
        }
        
        require_once "model/DemotCommentModel.php";
        
        $data = isset($_POST['data']) ? $_POST['data'] : false;
        
        
        $id_demot = (isset($data['id_demot'])) ? intval($data['id_demot']) : 0;
           
        if (intval($data['id_demot']) == 0) {
            if ($id_demot > 0)
                System::redirect(View::getRoot()."/demot/pokaz/".$id_demot);
            else
                System::redirect(View::getRoot()."/index/strona-glowna");
            die('Error #12');
        }
        
        if ($data)
        {        
            if (DemotCommentModel::save($data))
            {
                UserModel::count_demot(UserModel::COMMENT_INC);
                flash_message::setMessage("Zapisano komentarz do bazy, po rozpatrzeniu moderatora zostanie dodany.");
            }
            else
            {
                flash_message::setMessage("Wystąpił problem podczas dodawania komentarza.");
            
            }                
        }
          
        System::redirect(View::getRoot()."/demot/pokaz/".$data['id_demot']);        
    }
    
    public function index()
    {
        self::setLayout('index');
    }
    
    public static function upload()
    {      
        if(!UserModel::isLoggedIn()||!isset($_REQUEST['mode'])) 
        { 
            echo ("Dostęp wyłącznie dla zalogowanych użytkowników");            
            die('Odświerz strone.');            
        }
        
        $request = isset($_REQUEST['mode']) ? $_REQUEST['mode'] : '';
        
        $token = isset($_REQUEST['token']) ? $_REQUEST['token'] : '';
        
        if ($token != $_SESSION['token']) { 
            echo ("error"); 
            return false; 
        }
        
        $id = isset($_REQUEST['id_demot']) ? intval($_REQUEST['id_demot']) : 0;
        
        if ($id < 1) { echo "error"; return false; }
        
        $image = getimagesize($_FILES[ 'Filedata' ][ 'tmp_name' ]); 
        if(is_array($image) && $image[0] > 4){
            
        }
        else
        {
            echo "error"; return false; 
        }
        
        switch ($request)
        {
            case 'orig':                
                if ( move_uploaded_file( $_FILES[ 'Filedata' ][ 'tmp_name' ],'./bank/demot/orig/'.$id.'.jpg'))
                {  chmod('./bank/demot/orig/'.$id.'.jpg',0600); echo ("done"); } else { echo ("error"); }
                break;
            case 'normal':
                if ( move_uploaded_file( $_FILES[ 'Filedata' ][ 'tmp_name' ],'./bank/demot/normal/'.$id.'.jpg'))
                {  chmod('./bank/normal/orig/'.$id.'.jpg',0600); echo ("done"); } else { echo ("error"); }
                break;
            case 'mini':
                if ( move_uploaded_file( $_FILES[ 'Filedata' ][ 'tmp_name' ],'./bank/demot/mini/'.$id.'.jpg') )
                { chmod('./bank/mini/orig/'.$id.'.jpg',0600); echo ("done"); } else { echo ("error"); }
                break;
        }
        die();       
    }
    
    /**
     * 
     * TODO::
     * 
     * DOROBIC PAGIERA
     * !!!!!!!!!!!!!!!
     */
    public function delete_comment()
    {
        if(!UserModel::isLoggedIn()||!UserModel::checkPrivileges(Privileges::ADMIN))  
        { 
            flash_message::setMessage("Dostęp wyłącznie dla administratorów");
            System::redirect(View::getRoot()."/index/strona-glowna");  
            die('Odświerz strone.');            
        } 
        require_once "model/DemotCommentModel.php";
        
        $id = isset($_REQUEST['id']) ? $_REQUEST['id'] : 0;
        
        if (DemotCommentModel::delete($id))
        {
            flash_message::setMessage("Komentarz usunięty");
        }
        else
        {
            flash_message::setMessage("Bład podczas usuwania komentarza");
        }
        System::redirect("index.php?controller=demot&action=comments"); 
    }
    
    public function activate_comment()
    {
        if(!UserModel::isLoggedIn()||!UserModel::checkPrivileges(Privileges::ADMIN))  
        { 
            flash_message::setMessage("Dostęp wyłącznie dla administratorów");
            System::redirect(View::getRoot()."/index/strona-glowna"); 
            die('Odświerz strone.');            
        } 
        require_once "model/DemotCommentModel.php";
        
        $id = isset($_REQUEST['id']) ? $_REQUEST['id'] : 0;
        
        if (DemotCommentModel::activate($id))
        {
            flash_message::setMessage("Komentarz aktywowany");
        }
        else
        {
            flash_message::setMessage("Bład podczas aktywowania komentarza");
        }
        System::redirect("index.php?controller=demot&action=comments"); 
    }
    
    public function comments()
    {
        if(!UserModel::isLoggedIn()||!UserModel::checkPrivileges(Privileges::ADMIN))  
        { 
            flash_message::setMessage("Dostęp wyłącznie dla administratorów");
            System::redirect(View::getRoot()."/index/strona-glowna");  
            die('Odświerz strone.');            
        }
        require_once "model/DemotCommentModel.php";
        require_once 'library/external/pager.php';
        
        $oPager = new Vframe_Pagination();
        $oPager->limit(10);
        $demotCount = DemotCommentModel::count();
        
        $oPager->items($demotCount);
        $action = 'comments';
        
        $page = isset($_GET['page']) ? intval($_GET['page']) : 1;
        $oPager->page($page);
        
        $oPager->PatternPage('<div class="nav"><a href="index.php?controller=index&action='.$action.'&page=[$]"> [$] </a></div>');
        $oPager->PatternPageCurrent('<div class="nav"><strong> [$] </strong></div>');
        //$oPager->PatternPageNavigation('<div class="nav"><a href="index.php?controller=index&action=index&page=[$]" rel="nofollow">[$$]</a></div>', array('&laquo; poprzednia', 'następna &raquo;'));
        $oPager->PatternSeparator('<span>...</span>');
        
        View::assign('comments', DemotCommentModel::fetchAll());
        View::assign('pager', $oPager);
                
        self::setTemplate('admin');  
        self::setLayout('page');
        self::setContentFile('parts/demot/list_comments');
        
    }
    
}

?>
